import { defineStore } from 'pinia'
import type { UserInfo } from '../../types/userinfo/UserInfo'

/**
 * 用户信息存储模块
 * 负责管理用户相关数据的全局状态
 */
export const useUserStore = defineStore('user', {
    // 持久化配置
    persist: {
        storage: localStorage,
        paths: ['userInfo']
    },

    // 状态定义
    state: () => ({

        // 当前登录用户信息，初始为null
        userInfo: null as UserInfo | null,

        // 用户列表，用于管理员查看所有用户
        userList: [] as UserInfo[],

        // 加载状态，标记是否正在请求数据
        loading: false

    }),

    // 操作方法
    actions: {
        /**
         * 获取所有用户信息
         * 通常由管理员调用
         */
        async fetchAllUserInfo() {
            this.loading = true  // 开始加载
            try {
                // 这里实际调用API获取用户数据
                // this.userList = await userApi.getAllUsers()
            } finally {
                this.loading = false  // 结束加载
            }
        },

        /**
         * 设置当前用户信息（登录时调用）
         * @param userInfo - 用户信息对象
         */
        setUserInfo(info: UserInfo) {
            this.userInfo = info
            // 如果需要持久化
            localStorage.setItem('userInfo', JSON.stringify(info));
        },

        /**
         * 清除当前用户信息（退出登录时调用）
         */
        clearUser() {
            this.userInfo = null
        },

        /**
         * 更新用户信息
         * @param updatedUser - 更新后的用户信息
         */
        updateUserInfo(updatedUser: UserInfo) {
            this.userInfo = updatedUser
        },

    },

    // 计算属性
    getters: {
        /**
         * 登录状态判断
         * @param userInfo
         * @returns boolean
         */
        isLoggedIn: (state) => !!state.userInfo,

        /**
         * 用户类型快捷访问
         * @param userInfo
         * @returns userType
         */
        userType: (state) => state.userInfo?.userType || null,

        // /**
        //  * 根据用户类型筛选用户
        //  * @param userType - 用户类型(1-领导、2-辅导员、3-教师等)
        //  * @returns 符合类型的用户数组
        //  */
        // usersByType: (state) => (userType: number) =>
        //     state.userList.filter(user => user.userType === userType),
        //
        // /**
        //  * 根据部门筛选用户
        //  * @param department - 部门名称
        //  * @returns 该部门的用户数组
        //  */
        // usersByDepartment: (state) => (department: string) =>
        //     state.userList.filter(user => user.department === department)
    }
})
